"""
题目：删除单链表中所有值等于目标值的节点。
"""
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

#根据参数的集合数据 构造出单链表 并返回首结点指针
def create_linked_list(arr):
    if not arr:
        return None
    head = ListNode(arr[0])
    current = head
    for val in arr[1:]:
        current.next = ListNode(val)
        current = current.next
    return head


#根据要删除的目标值 剔除掉 返回剔除后的链表对象
def remove_elements(head, val):
    # 创建哑节点，简化头节点被删除的情况  因为如果不这样设计，一旦头结点就是要被删除的节点，依然要新创建一个节点，来串联后面的节点 本质都是一样的
    dummy = ListNode(0)
    #哑节点指向头节点
    dummy.next = head
    # 从哑节点开始遍历
    current = dummy
    # 遍历链表
    while current.next:
        # 如果下一个节点的值等于目标值
        if current.next.val == val:
            # 跳过该节点（删除）
            current.next = current.next.next
        else:
            # 否则移动到下一个节点
            current = current.next
    # 返回新的头节点（哑节点的下一个）
    return dummy.next



#遍历、搜集最新单链表节点数据
def traverse_linked_list(head):
    result = []
    current = head
    while current:
        result.append(current.val)
        current = current.next
    return result


# 测试
head = create_linked_list([1, 2, 6, 3, 4, 5, 6])
head = remove_elements(head, 6)  # 删除所有值为6的节点
print(traverse_linked_list(head))  # 输出: [1, 2, 3, 4, 5]
